import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.io.StringReader;
import java.util.*;
import java.lang.Boolean;


class XmlServidor extends Xml
{
	public XmlServidor(String xml_text)
	{
		super(xml_text);
	}


	static String listaDePartidas(LinkedList<Partida> partidas)
	{
		String xml_listaDePartidas = "<lista_de_partidas>";
		ListIterator<Partida> listIteratorPartida = partidas.listIterator();
		while (listIteratorPartida.hasNext())
		{
			Partida partida = listIteratorPartida.next();
			xml_listaDePartidas += "<partida>" + partida.getNombre() + "</partida>";
		}
		xml_listaDePartidas += "</lista_de_partidas>";

		return xml_listaDePartidas;
	}

	String nombrePartida()
	{
		try
		{
			Node nodo = (Node)document.getDocumentElement();
			if (nodo.getNodeName().equals("crear_partida") || nodo.getNodeName().equals("conectar_partida"))
			{
				NodeList nodeList = nodo.getChildNodes();
				Node nodo2 = nodeList.item(0);
				NodeList nodeList2 = nodo2.getChildNodes();
				nodo2 = nodeList2.item(0);

				return nodo2.getNodeValue();
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		return null;
	}

	String nombreJugador()
	{
		try
		{
			Node nodo = (Node)document.getDocumentElement();
			if (nodo.getNodeName().equals("nombre_jugador"))
			{
				NodeList nodeList = nodo.getChildNodes();
				Node nodo2 = nodeList.item(0);

				return nodo2.getNodeValue();
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		return null;
	}

	Teclado teclas()
	{
		Teclado teclado = null;
		HashMap<String, String> hashMapTeclado = new HashMap<String, String>();

		try
		{
			Node nodoRaiz = (Node)document.getDocumentElement();
			NodeList nodeListRaiz = nodoRaiz.getChildNodes();

			for (int i = 0; i < nodeListRaiz.getLength(); i++)
			{
				Node nodoTeclaNombre = nodeListRaiz.item(i);
				NodeList nodeListTeclaValor = nodoTeclaNombre.getChildNodes();
				Node nodoTeclaValor = nodeListTeclaValor.item(0);
				hashMapTeclado.put(nodoTeclaNombre.getNodeName(), nodoTeclaValor.getNodeValue());
			}

			teclado = new Teclado(
				Boolean.valueOf(hashMapTeclado.get("izquierda")),
				Boolean.valueOf(hashMapTeclado.get("derecha")),
				Boolean.valueOf(hashMapTeclado.get("adelante")),
				Boolean.valueOf(hashMapTeclado.get("atras")),
				Boolean.valueOf(hashMapTeclado.get("espacio")),
				Boolean.valueOf(hashMapTeclado.get("escape"))
			);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		return teclado;
	}

	static String estadoDePartida(Partida partida, String nombreJugador)
	{
		String xml_estadoDePartida = "<estado_de_partida>";
		ListIterator<Jugador> listIteratorJugador = partida.jugadores.listIterator();
		while (listIteratorJugador.hasNext())
		{
			Jugador jugadorActual = listIteratorJugador.next();
			if (jugadorActual.nombre.compareTo(nombreJugador) == 0)
			{
				xml_estadoDePartida += "<nave_del_cliente>";
				xml_estadoDePartida += "<angulo>" + jugadorActual.getNave().getAngulo() + "</angulo>";
				xml_estadoDePartida += "<x>" + jugadorActual.getNave().getX() + "</x>";
				xml_estadoDePartida += "<y>" + jugadorActual.getNave().getY() + "</y>";
				xml_estadoDePartida += "<estado>todotranquis</estado>";
				xml_estadoDePartida += "</nave_del_cliente>";
			}
			else
			{
				xml_estadoDePartida += "<actor>";
				xml_estadoDePartida += "<tipo>nave</tipo>";
				xml_estadoDePartida += "<angulo>" + jugadorActual.getNave().getAngulo() + "</angulo>";
				xml_estadoDePartida += "<x>" + jugadorActual.getNave().getX() + "</x>";
				xml_estadoDePartida += "<y>" + jugadorActual.getNave().getY() + "</y>";
				xml_estadoDePartida += "<estado>todotranquis</estado>";
				xml_estadoDePartida += "</actor>";
			}
		}
		xml_estadoDePartida += "</estado_de_partida>";

		return xml_estadoDePartida;
	}

	static String salir()
	{
		return "<salir>true</salir>";
	}
}
